package ar.com.digitalbricks.imprenta.persona.impl;

import java.util.Calendar;
import java.util.GregorianCalendar;

import ar.com.digitalbricks.fwk.impl.PersistentImpl;
import ar.com.digitalbricks.imprenta.general.enums.Dia;
import ar.com.digitalbricks.imprenta.persona.CalendarioAtencionItem;
import ar.com.digitalbricks.imprenta.persona.dao.CalendarioAtencionItemDAO;
import ar.com.digitalbricks.imprenta.persona.enums.Horario;

public class CalendarioAtencionItemImpl extends PersistentImpl implements CalendarioAtencionItem {
	private static CalendarioAtencionItemDAO calendarioAtencionItemDAO;
	private Calendar desde;
	private Calendar hasta;

	public CalendarioAtencionItemImpl() {}
	
	public CalendarioAtencionItemImpl(CalendarioAtencionItem item) {
		this.desde = (Calendar) item.getDesde().clone();
		this.hasta = (Calendar) item.getHasta().clone();
	}

	@Override
	public void setDesde(Horario desde){
		if (this.getDesde() == null){
			Calendar desdeCalendar = new GregorianCalendar();
			desdeCalendar.set(0, 0, 0, desde.getCalendarHourOrdinal(), desde.getCalendarMinuteOrdinal());
			this.setDesde(desdeCalendar);
		}else{
			this.getDesde().set(Calendar.HOUR_OF_DAY, desde.getCalendarHourOrdinal());
			this.getDesde().set(Calendar.MINUTE, desde.getCalendarMinuteOrdinal());
		}
	}
	
	@Override
	public void setHasta(Horario hasta){
		if (this.getHasta() == null){
			Calendar hastaCalendar = new GregorianCalendar();
			hastaCalendar.set(0, 0, 0, hasta.getCalendarHourOrdinal(), hasta.getCalendarMinuteOrdinal());
			this.setHasta(hastaCalendar);
		}else{
			this.getHasta().set(Calendar.HOUR_OF_DAY, hasta.getCalendarHourOrdinal());
			this.getHasta().set(Calendar.MINUTE, hasta.getCalendarMinuteOrdinal());
		}
	}
	
	@Override
	public void setDia(Dia dia) {
		if (this.getDesde() != null){
			this.getDesde().set(Calendar.DAY_OF_WEEK, dia.ordinal());
		}else{
			Calendar desdeCalendar = new GregorianCalendar();
			desdeCalendar.set(0, 0, dia.ordinal(), 0, 0);
			this.setDesde(desdeCalendar);
		}
		if (this.getHasta() != null){
			this.getHasta().set(Calendar.DAY_OF_WEEK, dia.ordinal());
		}else{
			Calendar hastaCalendar = new GregorianCalendar();
			hastaCalendar.set(0, 0, dia.ordinal(), 0, 0);
			this.setHasta(hastaCalendar);
		}
	}
	
	@Override
	public Calendar getDesde() {
		return this.desde;
	}
	
	@Override
	public Horario getDesdeHorarioForm(){
		if (this.getDesde() != null){
			int hour = this.getDesde().get(Calendar.HOUR_OF_DAY);
			int min = this.getDesde().get(Calendar.MINUTE);
			return Horario.get(hour, min);
		}
		return null;
	}

	protected void setDesde(Calendar desde) {
		this.desde = desde;
	}

	@Override
	public Calendar getHasta() {
		return this.hasta;
	}
	
	@Override
	public Horario getHastaHorarioForm(){
		if (this.getHasta() != null){
			int hour = this.getHasta().get(Calendar.HOUR_OF_DAY);
			int min = this.getHasta().get(Calendar.MINUTE);
			return Horario.get(hour, min);
		}
		return null;
	}

	protected void setHasta(Calendar hasta) {
		this.hasta = hasta;
	}

	@Override
	public void delete() {
		this.getCalendarioAtencionItemDAO().delete(this);
	}

	@Override
	public void save() {
		this.getCalendarioAtencionItemDAO().save(this);
	}

	public CalendarioAtencionItemDAO getCalendarioAtencionItemDAO() {
		return calendarioAtencionItemDAO;
	}

	@SuppressWarnings("static-access")
	public void setCalendarioAtencionItemDAO(CalendarioAtencionItemDAO calendarioAtencionItemDAO) {
		this.calendarioAtencionItemDAO = calendarioAtencionItemDAO;
	}
}